package com.startrek.ch02;

public class Palindrome {

    public boolean isPalindrome(String s) {
        if (s == null) {
            throw new IllegalArgumentException("Input string must not be null!");
        }
        if (s.length() == 0 || s.length() == 1) {
            return true;
        }

        return isPalindrome(s, 0, s.length() - 1);
    }

    /*
    在递归程序设计中定义第二个方法来接收附加的参数是一种常用的设计技巧！
    辅助方法在设计数组和字符串问题的递归方案上是非常有用的。
    防止每次递归调用都产生一个新的字符串。
     */
    private boolean isPalindrome(String s, int start, int end) {
        if (end <= start) {
            return true;
        }
        if (s.charAt(start) != s.charAt(end)) {
            return false;
        }

        return isPalindrome(s, ++start, --end);
    }
}
